#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

//int main()
//{
//	int n = 0;
//	std::cin >> n;
//	std::vector<int> v(n);
//	for (int i = 0; i < n; ++i)
//	{
//		std::cin >> v[i];
//	}
//	sort(v.begin(), v.end());
//	int tmp = 0;
//	for (int i = 0; i < n; ++i)
//	{
//		tmp += v[i] * 2;
//	}
//	int max = tmp - v[0] - v[1];
//	int min = tmp - v[n - 1] - v[n - 2];
//	std::cout << max << " " << min << std::endl;
//	return 0;
//}


//int main()
//{
//    int T = 0;
//    cin >> T;
//    while (T--)
//    {
//        int n = 0;
//        cin >> n;
//        vector<int> v(n);
//        for (int i = 0; i < n; ++i)
//        {
//            cin >> v[i];
//        }
//        sort(v.begin(), v.end(), greater<int>());
//        for (int i = 0; i < n; ++i)
//        {
//            while (v[i] > n)
//            {
//                v[i] /= 2;
//            }
//        }
//        vector<int> hash(n + 1);
//        int flag = 1;
//        for (int i = n - 1; i >= 0; --i)
//        {
//            while (v[i] > 0)
//            {
//                if (hash[v[i]] == 1)
//                    v[i] /= 2;
//                else
//                {
//                    hash[v[i]] = 1;
//                    break;
//                }
//                    
//            }
//            if (v[i] <= 0)
//            {
//                flag = 0;
//                break;
//            }
//        }
//        if (flag == 1)
//            cout << "yes" << endl;
//        else
//            cout << "no" << endl;
//    }
//    return 0;
//}


//int main()
//{
//    int n = 0;
//    cin >> n;
//    vector<int> v(1 + n);
//    int sum = 0;
//    for (int i = 1; i <= n; ++i)
//    {
//        cin >> v[i];
//    }
//    for (int i = 1; i <= n; ++i)
//    {
//        if (i % 3 != 0)
//            continue;
//        sum += v[i];
//    }
//    if (sum % 3 == 0)
//        cout << "Yes";
//    else
//        cout << "No";
//    return 0;
//}


//int main()
//{
//    int n = 0;
//    cin >> n;
//    vector<int> v(n);
//    for (int i = 0; i < n; ++i)
//    {
//        cin >> v[i];
//    }
//    int w2 = n / 3;
//    sort(v.begin(), v.end());
//    long long w2_sum = 0;
//    for (int i = 0; i < w2; ++i)
//    {
//        w2_sum += v[i];
//    }
//    long long sum = 0;
//    for (int i = w2; i < n; ++i)
//    {
//        sum += v[i];
//    }
//    long long ans1 = sum - 2 * w2_sum;
//
//
//    return 0;
//}


//int main()
//{
//    int n = 0;
//    cin >> n;
//    vector<int> v(n);
//    for (int i = 0; i < n; ++i)
//    {
//        cin >> v[1];
//    }
//    sort(v.begin(), v.end());
//    long long max = 0;
//    for (int i = 2; i < n; ++i)
//    {
//        max += v[i];
//    }
//    long long ans1 = 2 * max - v[0] - v[1];
//
//    // long long min = 0; 
//    // for(int i = 1; i < n; ++i)
//    // {
//    //     min += v[i];
//    // }
//    // long long ans2 = min - 2 * v[0];
//    // if(ans1 > ans2)
//    //     cout << ans1 << endl;
//    // else
//    //     cout << ans2 << endl;
//    cout << ans1 << endl;
//    return 0;
//}



int main()
{
    int n, t;
    cin >> n >> t;
    vector<int> v(n);
    for (int i = 0; i < n; ++i)
    {
        cin >> v[i];
    }
    long long sum = 0;
    for (int i = 0; i < n; ++i)
    {
        sum += v[i];
    }
    sort(v.begin(), v.end());
    int ans = 0;
    for (int i = n - 1; i >= 0; --i)
    {
        long long tmp = sum - 2 * v[i];
        if (tmp >= 0 && tmp <= t)
            ans++;
    }
    cout << ans << endl;
    return 0;
}